//维护洋葱模型

// 1. 所有的中间件函数都要定义成async函数
// 2. 所有的next都要await
// 3. 所有的异步逻辑都要封装成promise 而且要被await住
const Koa = require("koa");
const app = new Koa();
app.use(async (ctx,next)=>{
    console.log(1);
    await next() //dispatch(1) 当前next函数返回的promise状态的确定 和下一个中间件函数的执行结果有关
    console.log(5);
})
app.use(async (ctx,next)=>{
    console.log(2)
    await next() // dispatch(2)
    console.log(4);
})
app.use(async (ctx,next)=>{ // next : dispatch(3)
    await new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log(3)
            resolve()
        },2000)
    })
    await next()
})
app.listen(3000)